


// 混入 (mixin) 提供了一种非常灵活的方式，来分发 Vue 组件中的可复用功能
// methods  data  computed  watch mounted created  一个混入对象可以包含任意组件选项


import Vue from 'vue'
import { mapState ,mapMutations , mapActions } from 'vuex'
import { baseURL } from './../api/request';
import { reg } from './../utils/validate';
import { ShowLoading , ShowSuccess , ShowError , ShowToast  } from './../utils/message';
import pic from '@/assets/images/Pikachu.jpg'
import { tochangeuserinfo } from '@/api/api'
import { tagList } from '@/utils'
import _ from 'lodash'
// 全局混入
Vue.mixin({
    data(){
      return {
        base:'https://xxx.www.com',
        num:3000,
        baseURL,
        reg,
        pic,
        levels:['普通','初级','中级','高级','大神'],
        lel:['普通/简单','初级/复杂','中级/困难','高级/地狱','大神/无解'],
        colors:["#1890FF","#91CB74","#FAC858","#73C0DE","#EE6666"],
        tagList,
        loda:_,
      }
    },
    computed:{
      ...mapState([
        'userInfo',
        'hbanners',
        'myms',
        'offerList'
      ])
    },
    watch:{

    },
    methods:{
      throttle(func, interval) {
        let sign = true;
        return function() {
          // 在函数开头判断标志是否为 true，不为 true 则中断函数
          if (!sign) return;
          //  sign 设置为 false，防止执行之前再被执行
          sign = false;
          setTimeout(() => {
            func.apply(this, arguments)
            // 执行完事件之后，重新将这个标志设置为 true
            sign = true;
          }, interval)
        }
      },
      // 防抖 事件触发 n 秒后执行一次, 如果在 n 秒内重复触发则重新计算函数执行时间
      debounce(func, interval) {
        // 设置标识符
        let timer = null;
        return function () {
          // 判断定时器是否存在，清除定时器
          timer && clearTimeout(timer)
          // 重新调用setTimeout
          timer = setTimeout(() =>  {
            func.apply(this, arguments)
            timer = null;
          }, interval)
        }
      },
      toten(value){
          return value<10 ? '0'+value :value;
      },
      formatDate(date) {
        return `${date.getFullYear() }-${this.toten(date.getMonth() + 1)}-${this.toten(date.getDate())}`;
      },
      async changeavatar(path){
        // 后端修改
        let res = await tochangeuserinfo({
          avatar:path
        })
        if(res.code==200){
          // 前端修改
          this.getUesrInfoData({
            ...this.userInfo,
            avatar:path
          })
        }

      },
      ShowLoading,
      ShowSuccess,
      ShowError,
      ShowToast,
      ...mapActions([
        'getUserInfoAsync',
        'getHomeBannerAsync',
        'getMyMsListAsync'
      ]),
      ...mapMutations([
        'changeCount',
        'changeMsg',
        'getUesrInfoData',
        'setHomeBanners',
        'getMyOfferList'
      ]),
      gotopage(url){
        this.$router.push(url)
      },
      numAdd(){
        this.num++;
      }
    },

    mounted(){
      // console.log('这是全局的混入的生命周期 mounted ')
    }
})
